#include "phi.h"

GPIO_TypeDef* PHI_PORT[PHIn] = {PHI1_GPIO_PORT, PHI2_GPIO_PORT, PHI3_GPIO_PORT, PHI4_GPIO_PORT, PHI5_GPIO_PORT, PHI6_GPIO_PORT};
const uint16_t PHI_PIN[PHIn] = {PHI1_PIN, PHI2_PIN, PHI3_PIN, PHI4_PIN, PHI5_PIN, PHI6_PIN};
const uint32_t PHI_CLK[PHIn] = {PHI1_GPIO_CLK, PHI2_GPIO_CLK, PHI3_GPIO_CLK, PHI4_GPIO_CLK, PHI5_GPIO_CLK, PHI6_GPIO_CLK};


void PHI_init(PHI_TypeDef Phi)
{
  GPIO_InitTypeDef  GPIO_InitStructure;
  
  /* Enable the GPIO_LED Clock */
  RCC_AHBPeriphClockCmd(PHI_CLK[Phi], ENABLE);

  /* Configure the GPIO_LED pin */
  GPIO_InitStructure.GPIO_Pin = PHI_PIN[Phi];
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(PHI_PORT[Phi], &GPIO_InitStructure);
}

void PHI_high(PHI_TypeDef Phi)
{
  PHI_PORT[Phi]->BSRR = PHI_PIN[Phi];
}

void PHI_low(PHI_TypeDef Phi)
{
  PHI_PORT[Phi]->BRR = PHI_PIN[Phi];
}

void PHI_toggle(PHI_TypeDef Phi)
{
  PHI_PORT[Phi]->ODR ^= PHI_PIN[Phi];
}

void Phase_init(void)
{
	int i;
	for (i=0;i<6;i++)
		PHI_init((PHI_TypeDef)i);
};
void Phase1(void)
{
	PHI_high(PHI1);
	PHI_high(PHI3);
	PHI_high(PHI5);
	PHI_low(PHI2);
	PHI_low(PHI4);
	PHI_low(PHI6);
};
void Phase2(void)
{
	PHI_low(PHI1);
	PHI_low(PHI3);
	PHI_low(PHI5);
	PHI_high(PHI2);
	PHI_high(PHI4);
	PHI_high(PHI6);
};

void Phase_toggle(void)
{
	int i;
	for (i=0;i<6;i++)
		PHI_toggle((PHI_TypeDef)i);
};

void Phase1_set(void)
{
	GPIOB->ODR = 0x15;
};

void Phase2_set(void)
{
	GPIOB->ODR = 0x2A;
};

void Phase_toggle_set(void)
{
	GPIOB->ODR ^= 0xFF;
};
